# !/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
@作者 杨阳
@时间 2018-06-26
@说明 文件操作工具类
@注意事项
"""
import os

import openpyxl
import xlrd
from openpyxl import Workbook

from settings import IMPORT_USER_EXCEL_PATH
from util import DateUtil, LogUtil
from util.StrUtil import trim, to_lower


def allowed_update_file(file_name, file_ext):
    """
    传入文件名称，及允许上传的文件后缀
    :param file_name:   文件名称
    :param file_ext:    文件后缀名
    :return:
    """
    if file_name.find(".") > -1:
        for ext in file_ext.split(","):
            LogUtil.inro(trim(ext))
            if to_lower(file_name).endswith(to_lower(trim(ext))):
                return True
        return False
    else:
        return False


def read_xls_excel(excel_path):
    """
    读取2007以前版本，以xls为后缀名的excel文档，返回集合
    :param excel_path:      excel全路径，包含文件名
    :return:
    """
    if not os.path.exists(excel_path):
        raise RuntimeError("excel file not found : {}".format(excel_path))

    # 读取excel文件
    workbook = xlrd.open_workbook(excel_path)
    # 根据sheet名称获得sheet
    sheet = workbook.sheet_by_name('导入模板')

    row_list = []

    for rowindex in range(sheet.nrows):
        cell_list = []
        for celindex in range(sheet.ncols):
            cell_value = sheet.cell((rowindex), celindex).value
            if cell_value == "数据结束":
                break
            else:
                cell_list.append(cell_value)
        if cell_list:
            row_list.append(cell_list)
    # 将下标注为1的移除，因为这里的是列头，不是数据
    row_list.pop(0)
    return row_list


def read_xlsx_excel(excel_path):
    """
    读取2007以后版本，以xlsx为后缀名的excel文档，返回集合
    :param excel_path:      excel全路径，包含文件名
    :return: 返回 sheet中的所有行
    """
    if not os.path.exists(excel_path):
        raise RuntimeError("excel file not found : {}".format(excel_path))

    wb = openpyxl.load_workbook(excel_path)
    sheet = wb.get_sheet_by_name('导入模板')
    row_list = []
    LogUtil.inro("文档内容：")
    for row in sheet.rows:
        cell_list = []
        for cell in row:
            cell_value = cell.value
            if cell_value == "数据结束":
                break
            else:
                cell_list.append(cell_value)
        if cell_list:
            row_list.append(cell_list)
    # 将下标注为1的移除，因为这里的是列头，不是数据
    row_list.pop(0)
    return row_list


def write_xlsx_excel(header_list, row_list):
    """
    将数据写入到excel中，导出后为2007版excel，后缀名为xlsx
    :param header_list      类型为集合，存储导出excel的列头
    :param row_list         类型为集合，存储每一行的内容，每一行又是list，定内容的时候进行双重循环即可
    :return:
    """
    LogUtil.inro("===========================================导出excel===========================================")
    LogUtil.inro("列头：{}".format(header_list))
    LogUtil.inro("数据：{}".format(row_list))

    # 新建一个excel，只不过这时候还没有保存
    wb = Workbook()
    # 新建一个名为用户数据的sheet，index=0表示第一个sheel
    sheet = wb.create_sheet('用户数据', index=0)

    # 首先写入标题
    sheet.append(header_list)

    # 写入内容
    for row in row_list:
        sheet.append(row)

    file_name = DateUtil.format_date("%Y%m%d%H%M%S") + "-用户数据.xlsx"
    file_path = IMPORT_USER_EXCEL_PATH + "/" + file_name
    LogUtil.inro("生成excel{}".format(file_path))
    wb.save(file_path)
    LogUtil.inro("===========================================导出excel===========================================")
    return file_name


if __name__ == '__main__':
    print(str(allowed_update_file("123.jpg", "png, PNG, JPG, jpeg")))
